package com.zenithmind.document.pojo.query;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 文档版本查询DTO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "文档版本查询DTO")
public class DocumentVersionQueryDTO {

    /**
     * 页码
     */
    @Schema(description = "页码")
    private Integer current = 1;

    /**
     * 每页大小
     */
    @Schema(description = "每页大小")
    private Integer size = 10;

    /**
     * 关键词搜索
     */
    @Schema(description = "关键词搜索")
    private String keyword;

    /**
     * 文档ID
     */
    @Schema(description = "文档ID")
    private String documentId;

    /**
     * 文档ID列表
     */
    @Schema(description = "文档ID列表")
    private List<String> documentIds;

    /**
     * 版本号
     */
    @Schema(description = "版本号")
    private String versionNumber;

    /**
     * 版本名称
     */
    @Schema(description = "版本名称")
    private String versionName;

    /**
     * 文件名
     */
    @Schema(description = "文件名")
    private String fileName;

    /**
     * 文件类型
     */
    @Schema(description = "文件类型")
    private String fileType;

    /**
     * 文件类型列表
     */
    @Schema(description = "文件类型列表")
    private List<String> fileTypes;

    /**
     * 是否为主版本（0-否，1-是）
     */
    @Schema(description = "是否为主版本（0-否，1-是）")
    private Integer isMajor;

    /**
     * 变更类型（1-新增，2-修改，3-删除，4-重构）
     */
    @Schema(description = "变更类型（1-新增，2-修改，3-删除，4-重构）")
    private Integer changeType;

    /**
     * 变更类型列表
     */
    @Schema(description = "变更类型列表")
    private List<Integer> changeTypes;

    /**
     * 版本状态（0-草稿，1-已发布，2-已归档）
     */
    @Schema(description = "版本状态（0-草稿，1-已发布，2-已归档）")
    private Integer status;

    /**
     * 版本状态列表
     */
    @Schema(description = "版本状态列表")
    private List<Integer> statuses;

    /**
     * 创建者ID
     */
    @Schema(description = "创建者ID")
    private String creatorId;

    /**
     * 创建者ID列表
     */
    @Schema(description = "创建者ID列表")
    private List<String> creatorIds;

    /**
     * 创建者名称
     */
    @Schema(description = "创建者名称")
    private String creatorName;

    /**
     * 最小文件大小（字节）
     */
    @Schema(description = "最小文件大小（字节）")
    private Long minFileSize;

    /**
     * 最大文件大小（字节）
     */
    @Schema(description = "最大文件大小（字节）")
    private Long maxFileSize;

    /**
     * 创建时间范围-开始
     */
    @Schema(description = "创建时间范围-开始")
    private LocalDateTime createTimeFrom;

    /**
     * 创建时间范围-结束
     */
    @Schema(description = "创建时间范围-结束")
    private LocalDateTime createTimeTo;

    /**
     * 更新时间范围-开始
     */
    @Schema(description = "更新时间范围-开始")
    private LocalDateTime updateTimeFrom;

    /**
     * 更新时间范围-结束
     */
    @Schema(description = "更新时间范围-结束")
    private LocalDateTime updateTimeTo;

    /**
     * 排序字段
     */
    @Schema(description = "排序字段")
    private String sortField;

    /**
     * 排序方向（asc/desc）
     */
    @Schema(description = "排序方向（asc/desc）")
    private String sortOrder = "desc";

    /**
     * 是否包含已删除
     */
    @Schema(description = "是否包含已删除")
    private Boolean includeDeleted = false;

    /**
     * 标签列表
     */
    @Schema(description = "标签列表")
    private List<String> tags;

    /**
     * 是否只查询我的版本
     */
    @Schema(description = "是否只查询我的版本")
    private Boolean onlyMine = false;

    /**
     * 是否只查询主版本
     */
    @Schema(description = "是否只查询主版本")
    private Boolean onlyMajor = false;

    /**
     * 是否只查询最新版本
     */
    @Schema(description = "是否只查询最新版本")
    private Boolean onlyLatest = false;
}
